/* 
 * File:   Proceso_DepuracionSesionesInactivas.cpp
 * Author: gabilan
 * 
 * Created on 20 de junio de 2013, 19:03
 */

#include "server_Proceso_DepuracionSesionesInactivas.h"


ProcesoDepuracionSesionesInactivas::ProcesoDepuracionSesionesInactivas(const 
uint32_t &pId, IAdministradorSesiones* pAdministradorSesiones,const unsigned int 
timeout): Proceso(pId) 
{
    this->_administradorSesiones = pAdministradorSesiones;
    this->_timeout = timeout;
}

void ProcesoDepuracionSesionesInactivas::Iniciar() throw(Excepcion&)
{
    try
    {
        Proceso::Iniciar();
    }
    catch(Excepcion &ex)
    {
        throw;
    } 
}

void ProcesoDepuracionSesionesInactivas::Finalizar() throw(Excepcion&)
{
    try
    {
        Proceso::Finalizar();
    }
    catch(Excepcion &ex)
    {
        throw;
    }    
}

void ProcesoDepuracionSesionesInactivas::tarea()
{
    while(this->GetCorriendo())
    {
        Sesion* sesion = this->_administradorSesiones->getSesionPrimera();
        time_t currentTime;
        time(&currentTime);

        while(sesion != NULL)
        {
            double seconds = difftime(currentTime, sesion->GetHora());
            if(seconds > this->_timeout)
                sesion->Finalizar();
            sesion = this->_administradorSesiones->getSesionSiguiente(sesion);
        } 
    }
}

ProcesoDepuracionSesionesInactivas::~ProcesoDepuracionSesionesInactivas() 
{
    this->_administradorSesiones = NULL;
}

